<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>05策略模式</title>
</head>
<body>
<div>一个基于策略模式的程序至少由两部分组成：</div>
<div>第一个部分是一组策略类，策略类封装了具体的算法，并负责具体的计算过程。</div>
<div>第二个部分是环境类Context，Context接受客户的请求，随后把请求委托给某一个策略类。要做到这点，说明Context 中要维持对某个策略对象的引用</div>
<script>
// 加权映射关系
var levelMap = {
	S: 20,
	A: 15,
	B: 10,
	C: 5,
};
// 组策略
var scoreLevel = {
	basicScore: 80,
	S: function() {
		return this.basicScore + levelMap['S'];
	},
	A: function() {
		return this.basicScore + levelMap['A'];
	},
	B: function() {
		return this.basicScore + levelMap['B'];
	},
	C: function() {
		return this.basicScore + levelMap['C'];
	},
};

// 调用
function getScore(level) {
    return scoreLevel[level] ? scoreLevel[level]() : 0;
}

console.log(
    getScore('S'),
    getScore('A'),
    getScore('B'),
    getScore('C'),
    getScore('D')
);
//100 95 90 85 0
</script>
</body>
</html>